package com.gitee.free.coding.core.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfiguration {

    /**
     * 阻止全表更新删除：插件能够识别并阻止没有指定条件的 update 和 delete 语句，这些语句可能会导致全表数据被修改或删除。
     * 保护数据安全：通过限制全表操作，减少因误操作或恶意攻击导致的数据丢失风险。
     * --
     * 具体如何阻止可参考下面这个方法。类似 [没有where条件的, where 1=1, where 1!=2] 这些更新或删除的操作都无法通过 MybatisPlusInterceptor 拦截器
     * -- com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor#checkWhere(java.lang.String, net.sf.jsqlparser.expression.Expression, java.lang.String)
     * --
     * 可通过以下方式排除 MybatisPlusInterceptor 拦截器。[@ComponentScan 替换 @SpringBootApplication]
     * -- @ComponentScan(basePackages = {"com.xxx.yyy"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = MybatisPlusConfiguration.class))
     *
     * @return MybatisPlusInterceptor
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}
